package service

import (
	"context"
	"monitoring-api/models"
	"monitoring-api/serializer"
)

// UploadPerService 管理上报性能信息服务
type UploadPerService struct {
	DCL   int64  `json:"dcl" form:"dcl"`       // DOM加载完成时间(dom_ready)，毫秒数
	DNS   int64  `json:"dns" form:"dns"`       // DNS解析耗时，毫秒数
	Fcp   int64  `json:"fcp" form:"fcp"`       // 首次内容绘制，毫秒数
	FP    int64  `json:"fp" form:"fp"`         // 首次绘制时间，毫秒数
	Kind  int64  `json:"kind" form:"kind"`     // 报告分类，1表示性能报告
	L     int64  `json:"l" form:"l"`           // 页面完全加载时间，毫秒数
	Lcp   int64  `json:"lcp" form:"lcp"`       // 页面最大内容渲染时间，毫秒数
	Time  int64  `json:"time" form:"time"`     // 产生日志的时间，时间戳
	URL   string `json:"url" form:"url"`       // 页面地址，不带?后面的get参数
	WebID int64  `json:"web_id" form:"web_id"` // 网站id，由使用者调用脚本函数传递
}

// Upload 上传性能信息
func (service *UploadPerService) Upload() serializer.Response {
	//初始化一个完整结构体
	Err := models.Per{
		WebID: service.WebID,
		Kind:  service.Kind,
		Time:  service.Time,
		URL:   service.URL,
		DCL:   service.DCL,
		DNS:   service.DNS,
		Fcp:   service.Fcp,
		FP:    service.FP,
		L:     service.L,
		Lcp:   service.Lcp,
	}
	// 添加进MongoDB
	collection := models.Mongo.Collection("performances")
	_, err := collection.InsertOne(context.TODO(), Err)
	if err != nil {
		return serializer.Response{
			Code:    500,
			Message: "上报性能信息失败!",
			Error:   err.Error(),
		}
	}
	return serializer.Response{
		Code:    0,
		Message: "上报性能信息成功!",
	}
}
